package main

import (
	"fmt"
	"time"
)

func main() {
	//注意，申明的是无缓冲信道
	//默认情况下，信道是双向的。即可以发送数据，也可以接收数据
	pipline := make(chan int)

	//这里使用协程，即演示了两个协程之前的通信。又解决代码 76信道.go 中的死锁问题。

	//以下两个协程，会几乎同时执行,所以文字的输入顺序，不见得每次完全一样
	go func() {
		fmt.Println("协程1，准备发送数据：100")
		pipline <- 100
		fmt.Println("协程1，发送完毕")
	}()

	go func() {
		fmt.Println("协程2，准备接收数据")
		num := <-pipline
		fmt.Printf("协程2，接收到的数据是：%d \n", num)
	}()

	// 主函数sleep，使得上面两个goroutine有机会执行
	time.Sleep(time.Second)
}
